#include <iostream>
#include <queue>
#include <cstring>
#include <vector>
using namespace std;
using ll=long long;
const int M=1e5+50;
const int N=1e4+10;
ll cost[N];
ll dist[N];
int n,m;
ll b;
int h[M],to[M],ne[M],idx;
ll w[M];
int vis[N];
void add(int x,int y,ll z)
{
	to[idx]=y;
	ne[idx]=h[x];
	w[idx]=z;
	h[x]=idx++;
}
struct cmp{
	bool operator()(const pair<int,ll>& p1,const pair<int,ll>& p2)
	{
//		p1.second>p2.second;
//		p1.first>p2.first;
	}
	
};
//bool dijkstra(ll mid)
//{
//    // cout << mid << endl;
//    priority_queue<pair<ll,int>, vector<pair<ll,int>>, greater<pair<ll,int>>>heap;
//    heap.push({0, 1});
//    memset(dist, 0x3f, sizeof dist);
//    memset(vis, 0, sizeof vis);
//    dist[1] = 0;
////  cout << f[1];
//    if(cost[1] > mid)return false;
//
//
//
//    while(heap.size())
//    {
//        auto t = heap.top();
//        int no = t.second;
//        heap.pop();
//        if(vis[no])continue;
//        vis[no] = true;
//        for(int i = h[no];~i; i = ne[i])
//        {
//            int j = to[i];
//            if(cost[j] > mid)continue;
//            if(dist[j] > dist[no] + w[i] && dist[no] + w[i] <= b)
//            {
//                dist[j] = dist[no] + w[i];
//                heap.push({dist[j], j});
//            }
//        }
//    }
////     cout << dist[n] << endl;
//    if(dist[n] != 0x3f3f3f3f3f3f3f3f)return true;
//    return false;
//}

bool dijkstra(ll limit)
{
//	priority_queue<pair<int,ll>,vector<pair<int,ll>>,cmp> q;
	priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> q;
	memset(dist,0x3f3f3f3f3f3f3f3f,sizeof(dist));
	
	memset(vis,0,sizeof(vis));
	dist[1]=0;
	if(cost[1]>limit || cost[n]>limit)
		return false;
	q.push({0,1});
	while(q.size())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])
			continue;
		vis[u]=1;
		for(int i=h[u];~i;i=ne[i])
		{
			int j=to[i];
			if(cost[j]>limit)
				continue;
			if(dist[j]>dist[u]+w[i] && dist[u]+w[i]<=b)
			{
				dist[j]=dist[u]+w[i];
				q.push({dist[j],j});
			}
		}
	}
//	cout<<dist[n]<<endl;
	return dist[n]<=b;
}

int main()
{
	
	cin>>n>>m>>b;
	
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&cost[i]);
	}


	memset(h,-1,sizeof(h));
	for(int i=0;i<m;i++)
	{
		int x,y;
		ll z;
		scanf("%d%d%lld",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
	}	
	ll l=0,r=1e9;
	while(l<r)
	{
		ll mid=l+r>>1;
		if(dijkstra(mid))
		{
			r=mid;
		}
		else{
			l=mid+1;
		}
	}
	if(dijkstra(1e9))
	{
		cout<<l<<endl;
	}
	else{
		cout<<"AFK"<<endl;
	}
	return 0;
}
